package ExceptionAndThread.Exception;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/*
 *
 * java.lang.Throwable:类是java语言中所有异常或者错误的超类
 *       Exception：编译期异常，进行编译（写代码）java程序出现的异常
 *           RuntimeException：运行期异常，java程序运行过程中出现的问题
 *       Error：错误
 *           一个无法治愈的问题，需要修改源代码才能使程序继续执行
 *
 * */
public class Exception01 {
    public static void main(String[] args) /*throws ParseException*//*使用抛出异常*/ {

        //Exception：编译期异常，进行编译（写代码）java程序出现的异常
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date d = null;
        try {
            d = simpleDateFormat.parse("2020-0330");
        } catch (ParseException e) {
            e.printStackTrace();
        }
        //java.text.ParseException: Unparseable
        System.out.println(d);
        System.out.println("上面的错误不影响下面代码的执行");


        //RuntimeException：运行期异常，java程序运行过程中出现的问题
        int[] a = {1, 2, 3};
        //int[] b = new int[1000000];
        //java.lang.OutOfMemoryError
        try {
            //存放可能会出现异常的代码
            System.out.println(a[4]);
        } catch (Exception e) {
            //存放异常处理的逻辑
            //java.lang.ArrayIndexOutOfBoundsException: Index 4 out of bounds for length 3
            //数组越界异常
            System.out.println(e);
        }
        //不使用try/catch，后续代码无法执行
        System.out.println("上面的错误不影响下面代码的执行？");


        // Error
        int [] arr1=new int[100000];
        //java.lang.OutOfMemoryError: Java heap space
        //内存溢出的错误
        //必须修改源代码
        // int [] arr2=new int[1000000000];
        int [] arr2=new int[100000];
        System.out.println("Error错误后续代码");

    }

}
